iT邦幫忙

2022 iThome 鐵人賽

DAY 6
1

前幾篇都在講一些概念,今天我們來點好玩的!

凡走過必留下痕跡

Log在目前的網站是非常必要的,不僅僅是收集操作的資訊,發生bug時也可以更快的分析問題,提升速度。而一個好上手的套件那就很重要了,那麼我們來介紹今天的主角Serilog有甚麼強大之處吧!

安裝

可以直接Nuget介面安裝或是下指令
第三行~第六行可依需求安裝

$ dotnet add package Serilog
$ dotnet add package Serilog.AspNetCore
$ dotnet add package Serilog.Sinks.Console //輸出到指令視窗
$ dotnet add package Serilog.Sinks.File //輸出到檔案
$ dotnet add package Serilog.Sinks.Debug //輸出到 Debug 視窗
$ dotnet add package Serilog.Sinks.Email //輸出寄送 Email

Level

原文在此(以下是我的翻譯 XDD)
Serilog 的Log分為以下等級 VerboseDebugInformationWarningErrorFatal

  • Verbose 詳細的紀錄細節以及追蹤的資訊,通常只在異常情況下開啟
  • Debug 就是debug,幫助查找已知的問題
  • Information 需要被記錄的資訊與使用者相關的事件,預設為最低的紀錄級別
  • Warning 可能的問題或服務/功能退化的指標
  • Error 造成應用程序或連接系統中的故障
  • Fatal 造成應用程序的嚴重錯誤

初始化 Serilog 設定

using Serilog;
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.Console() //將Log輸出到終端機
    .WriteTo.File("logs/log-.txt", rollingInterval: RollingInterval.Day) //將Log輸出為檔案,命名以當天日期為區分
    .WriteTo.Email(new EmailConnectionInfo() //這段是寄送email
    {
        MailServer = "smtp.gmail.com",
        Port = 465,
        EnableSsl = true,
        NetworkCredentials = new NetworkCredential("帳號", "密碼"),
        EmailSubject = "Error Notification",
        FromEmail = "寄信者",
        ToEmail = "收信者",
    })
    .CreateLogger();
try
{
    Log.Information("啟動開始");
    return 0;
}
catch (Exception ex)
{
    Log.Fatal(ex, "發生例外");
    return 1;
}
finally
{
    Log.CloseAndFlush(); // 程式要結束前呼叫
}

MinimumLevel指的是最最低顯示層級,預設為Information,若設定為MinimumLevel.Debug()那麼會被記錄的等級會有DebugInformationWarningErrorFatal

測試

我們在try裡面故意製造錯誤int.Parse("aaaa");

結果

File
https://ithelp.ithome.com.tw/upload/images/20220922/20152200Ulqyb6oXZL.png
Email
https://ithelp.ithome.com.tw/upload/images/20220922/201522003BRoM7M5tJ.png


參考資料

那今天就到這邊囉,大家明天見!


上一篇
[Day05]-自定義 Middleware
下一篇
[Day07]-控制反轉 (IoC)&依賴注入(DI)
系列文
ASP.NET Core 30 天旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言